/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.phoenix.repository.dao;

import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

/**
 * Jigsaw server
 * 
 * @author <a href="shamphone@gmail.com">Li XiongFeng</a>
 * @date 2012-4-29
 * @version 1.0.0
 */
public abstract class ValueTableCreateDao extends JdbcDao {
	public static final int MULTIPLE_MAX = 8;
	
	/**
	 * Add new Column to Table
	 * @param nodeDefinitionName
	 * @param propertyDefinitionName
	 * @param multiple
	 * @param searchable
	 * @param type
	 * @throws SQLException
	 */
	public abstract void addColumn(String nodeDefinitionName, String propertyDefinitionName, boolean multiple, boolean searchable, int type) throws SQLException ;

	
	/**
	 * @param tableName
	 * @return
	 */
	public boolean isTableExists(String tableName) {
		boolean exists = false;
		try {
			this.getMetaData(tableName);
			exists = true;
			return exists;
		} catch (SQLException e) {
			return exists;
		}
	}

	
	public abstract void createTable(String tableName) throws SQLException;
		
	

	/**
	 * 获取指定表的元数据
	 * 
	 * @param tableName
	 * @return
	 * @throws SQLException
	 */
	public ResultSetMetaData getMetaData(String tableName) throws SQLException {
		String query = "SELECT * FROM " + tableName + " WHERE 1=0";
		PreparedStatement statement = connection.prepareStatement(query);
		ResultSet rs = statement.executeQuery();
		// RowSet rowSet = this.createCacheRowSet(statement);
		ResultSetMetaData metadata = rs.getMetaData();
		return metadata;
	}

	/**
	 * 获取数据库的元数据
	 * 
	 * @return
	 * @throws SQLException
	 */
	public DatabaseMetaData getMetaData() throws SQLException {
		return connection.getMetaData();
	}	
	
	
}
